// 数字包括小数点
let numberReg = /^\d+$|^\d+[.]?\d+$/

// 数字不包括小数点
let numberNoSpotReg = /^[0-9]*$/

//数字和英文
let numberAbcReg = /(^[A-Za-z0-9]+$)/

//中文（去除中文标点符号）
let chineseNoSpotReg = /^[\u4E00-\u9FA5]+$/

//中文（包括中文标点符号）
let chineseReg = /^[\u2E80-\u9FFF]+$/

// 邮箱
// eslint-disable-next-line no-useless-escape
let emailReg = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/

// 手机号
let phoneReg = /(^((\+)?86|((\+)?86)?)0?1\d{10}$)/

// 身份证
let regId = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

let FormValidate = (function () {
  function FormValidate () {}
  // From表单验证规则  可用于公用的校验部分
  FormValidate.Form = function () {
    return {

      // 只能数字包括小数点的验证
      validateNumber (rule, value, callback) {
        if (value !== '') {
          if (!numberReg.test(value)) {
            callback(new Error('只能输入数字'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      // 只能数字包括小数点的验证
      validateNumberNoSpot (rule, value, callback) {
        if (value !== '') {
          if (!numberNoSpotReg.test(value)) {
            callback(new Error('只能输入数字'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      //只能输入数字和英文
      validateNumberAbc (rule, value, callback) {
        if (value !== '') {
          if (!numberAbcReg.test(value)) {
            callback(new Error('只能输入数字和英文'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      //中文（包括中文标点符号）
      validateChinese (rule, value, callback) {
        if (value !== '') {
          if (!chineseReg.test(value)) {
            callback(new Error('只能输入中文（包括中文标点符号）'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      //中文（不包括中文标点符号）
      validateChineseNoSpot (rule, value, callback) {
        if (value !== '') {
          if (!chineseNoSpotReg.test(value)) {
            callback(new Error('只能输入中文（不包括中文标点符号）'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      //不为中文（包括中文标点符号）
      validateNoChinese (rule, value, callback) {
        if (value !== '') {
          if (chineseReg.test(value)) {
            callback(new Error('不能输入中文（包括中文标点符号）'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      //不为中文（不包括中文标点符号）
      validateNoChineseNoSpot (rule, value, callback) {
        if (value !== '') {
          if (chineseNoSpotReg.test(value)) {
            callback(new Error('不能输入中文（不包括中文标点符号）'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      // 邮箱的验证规则
      validateEmail (rule, value, callback) {
        if (value !== '') {
          if (!emailReg.test(value)) {
            callback(new Error('邮箱格式不正确'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      // 电话号码的验证
      validatePhone (rule, value, callback) {
        if (!value) {
          return callback(new Error('请输入手机号码'))
        }
        if (!phoneReg.test(value)) {
          callback(new Error('手机格式不正确'))
        } else {
          callback()
        }
      },

      // 身份证的验证规则
      ID (rule, value, callback) {
        if (!value) {
          return callback(new Error('身份证不能为空'))
        }
        if (!regId.test(value)) {
          callback(new Error('请输入正确的二代身份证号码'))
        } else {
          callback()
        }
      }
    }
  }

  return FormValidate
}())

exports.FormValidate = FormValidate